package com.ordobill.flex.common;

import java.util.ArrayList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ordobill.webapp.beans.Modeling;
import com.ordobill.webapp.common.SqlMapClientManager;

public class ModelingTable {
    
    @SuppressWarnings("unused")
    private Log log = LogFactory.getFactory().getInstance(this.getClass().getName());
    private static SqlMapClient sqlMap = SqlMapClientManager.getSqlMapClient();
    /**
     * 
     * 조회하고자 하는 값을 Modeling Bean 의 Property 에 저장하여 입력해주시면
     * 해당조회값에 합하는 것을 Array 형태로 반환합니다.
     * 조회 가능한 값은 moUid, moProject, moBr, moSelf, moPre, moDepth, moType, moName(LIKE검색), moPuName(LIKE검색)
     * 
     * @param medeling Modeling Bean 을 받아 Modeling 테이블을 조회합니다.
     * @return Modeling[] Modeling Bean 를 Array 형태로 반환합니다.
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
	public static Modeling[] modelingList(Modeling medeling) throws Exception{
        //Modeling 테이블을 조회하여 ArrayList형태로 받아옵니다.
        ArrayList<Modeling> getModelArrayList = (ArrayList<Modeling>) sqlMap.queryForList("Modeling.list", medeling);
        
        //Array형태로 Modeling Bean을 생성합니다.
        Modeling[] getModelList = new Modeling[getModelArrayList.size()];
        
        getModelArrayList.toArray(getModelList);
        
        return getModelList;
    }
    
    /**
     * 
     * 조회하고자 하는 값을 Modeling Bean 의 Property 에 저장하여 입력해주시면
     * 해당조회값에 합하는 것을 Bean 형태로 반환합니다.
     * 조회 가능한 값은 moUid, moProject, moBr, moSelf, moPre, moDepth, moType, moName(LIKE검색), moPuName(LIKE검색)
     * 
     * @param medeling Modeling Bean 을 받아 Modeling 테이블을 조회합니다.
     * @return Modeling Bean 의 형태로 반환합니다.
     * @throws Exception
     */
    public static Modeling modelingBean(Modeling medeling) throws Exception{
        Modeling getModel = (Modeling) sqlMap.queryForObject("Modeling.list", medeling);
        return getModel;
    }    
    
    /**
     * 
     * @param sqlMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param modeling Modeling 테이블에 넣을 Bean 을 Array 형태로 받습니다.
     * @return message : {@code message > 0 : true, message < 0 : false}
     * @throws Exception
     */
    public static int modelingInsert(SqlMapClient sqlMap, Modeling[] modeling) throws Exception{
        int message = -1;
        for(Modeling model : modeling){
            
            message = (Integer)sqlMap.insert("Modeling.modelingInsert", model);
          
            if(message < 0){
                return message;
            }
        }
        return message;
    }
    
    /**
     * 
     * @param sqlMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param modeling Modeling 테이블에 넣을 Bean 을 Array 형태로 받습니다.
     * @return message : {@code message > 0 : true, message < 0 : false}
     * @throws Exception
     */
    public static int modelingUpdate(SqlMapClient sqlMap, Modeling[] modeling) throws Exception{
        int message = -1;
        for(Modeling model : modeling){
            message = (Integer)sqlMap.update("Modeling.modelingUpdate", model);
            
            if(message < 0){
                return message;
            }
        }
        return message;
    }
    
    /**
     * 
     * @param sqlMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param modeling Modeling 테이블에 넣을 Bean 을 Array 형태로 받습니다.
     * @return message : {@code message > 0 : true, message < 0 : false}
     * @throws Exception
     */    
    public static int modelingPreDelete(SqlMapClient sqlMap, Modeling[] modeling) throws Exception{
        int message = -1;
        
        if(modeling.length > 0){
            Modeling md = modeling[0];
            message = (Integer)sqlMap.delete("Modeling.modelingPreDelete", md);
            
            if(message < 0){
                return message;
            }
        }
        
        return message;
        
    }
    
    /**
     * Modeling을 Project단위로 삭제하여 주는 메소드 입니다.
     * 
     * @param salMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param moProject Modeling의 Project Uid
     * @return message : {@code message > 0 : true, message < 0 : false} 
     * @throws Exception
     */
    public static int modelingDelete(SqlMapClient salMap, int moProject) throws Exception{
        int message = -1;
        
        if(moProject == 0){
            throw new Exception("Modeling Project Uid는 0이상이여야 합니다.");
        }
        
        if(moProject > 0){
            
            message = (Integer)sqlMap.delete("Modeling.modelingPreDelete", new Modeling(moProject));
            
            if(message < 0){
                return message;
            }
            
        }
        
        return message;
    }
    
    /**
     * 
     * @param sqlMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param modeling Modeling 테이블에 넣을 Bean 을 Array 형태로 받습니다.
     * @return message : {@code message > 0 : true, message < 0 : false}
     * @throws Exception
     */    
    public static int modelingDelete(SqlMapClient sqlMap, Modeling[] modeling) throws Exception{
    	int message = -1;
    	for(Modeling model : modeling){
    		message = (Integer)sqlMap.delete("Modeling.modelingDelete", model);
    		
    		if(message < 0){
    			return message;
    		}
    	}
    	return message;
    }

}
